package thread;

// 线程终止
public class Demo8 {
    // 写作成员变量就不是触发变量捕获的逻辑了. 而是 "内部类访问外部类的成员" , 本身就是 ok 的~~
    //如果 isQuit 是局部变量，内部类会触发变量捕获（并且需要有效 final）；但因为 isQuit 是成员变量（静态或非静态），
    // 内部类可以直接访问外部类的成员变量，无需捕获。
    public static boolean isQuit = false;
    public static void main(String[] args) throws InterruptedException {


        Thread t = new Thread(() -> {
            while (!isQuit) {
                System.out.println("hello thread");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        t.start();

        // 主线程这里执行一些其他逻辑之后, 要让 t 线程结束.
        Thread.sleep(3000);

        // 这个代码就是在修改前面设定的标志位.
        isQuit = true;
        System.out.println("把 t 线程终止");
    }
}
